iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0
自我挑戰組

純新手學習 JavaScript系列 第 3

新手學習JavaScript: day03 - 基本型別好多種,宣告變數好難懂

  • 分享至 

  • xImage
  •  

昨天簡單的介紹了JavaScript的歷史。今晚!我想來點變數及基本型別。沒錯!從這篇開始我們要進入 JavaScript 的基礎語法啦!

什麼是變數(Variable)?

相信如果有上過國中數學課應該都對 x + 1 這樣子的運算不陌生,這個式子的 x 所代表的是一個未知的數值。這樣我們可以稱它為變數。

而在JavaScript程式中情況蠻類似的,簡單來說變數是用來存放資料,可以想像變數像是一個空的箱子或盒子,然後我們可以先將一些物品放入那個箱子中。如果還是沒有畫面,讓我們來看看下面的圖:

這個箱子就是變數,所以在 JavaScript 中我們可以這樣寫

var 箱子;

透過 var 來宣告變數箱子,接下你可能會問,為什麼要透過 var 宣告,宣告又是什麼?為什麼前面要有 var ?

原因是我們必須先告訴程式說,我們有箱子這個變數,所以前面要加上var 程式才看得懂,而這樣的行為稱作宣告,宣告的意義在於程式會幫我們預留該變數的記憶體空間。

宣告變數有一定的規則,變數必須使用字母(a-z、A-Z)、
下底線(_)、錢號($)作為開頭;後面的字員組成可以包含數字(0-9)。JavaScript 是區分大小寫(a-z)與(A-Z)不一樣。(P.S 變數名稱是可以用中文命名的,但還是盡量避免。)

而宣告變數的方式除了 var 以外,還有 let 跟還有常數 const。所以剛剛的例子可以寫成下面幾種形式

let box;
// 透過let 宣告變數 box ,但還未賦予值,目前box 是 undefinded。

let box2 = "cat"
//宣告變數box2,同時給了變數值,此時box2內容是字串"cat"。(P.S 這邊等號應該稱作指派會比等於來的精確)

const box3 = "cat"
//宣告常數 box3,同時給予值,此時box3內容是字串"cat"。

注意!常數宣告的同時,一定要給予值不然會出錯

const box3;

//Uncaught SyntaxError: Missing initializer in const declaration 。

先來簡單說明一下這三個宣告的差異。

被var 宣告過的變數依然可以再次宣告:

var box = "cat";
 
var box = "dog";
 
var box = "rabbit";

但是如果是 let 跟 const

let box = "cat";

let box = "dog";
 
// Uncaught SyntaxError: Identifier 'box' has already been declared
 const box = "cat";
 
 const box = "dog";

// Uncaught SyntaxError: Identifier 'box' has already been declared

會跳出錯誤告訴你變數box已經被宣告過了。

資料型別

JavaScript 是弱型別的程式語言,也能說是動態的程式語言,變數裡的值才會有資料型別的資訊。舉個例:

int num = 100;
//C#的整數宣告
var num = 1;
num = "這是個字串" ; //變數 num 裡的值從數字轉換成字串

// JavaScript 你可以隨時指定不同型態的值,給同樣一個變數

資料型別主要可以分成基本型別(Primitives)與物件型別(Object)。而基本型主要有string, number, boolean, null, undefined(其實還有bigint和symbol),除了上述幾種,其他可以歸類至Object。

判斷型別的方式,我們可以使用 typeof()

typeof('') // string
typeof(5) //number
typeof(NaN) // number
typeof(true) // boolean
typeof(null) // object 
typeof(undefined) // undefined

String 字串

字串會用 "" 雙引號或是 '' 單引號來包裹文字,用雙引號開頭就要雙引號結尾收合,同理單引號也是。不能夠像這樣 '"混用。

var str = "這是雙引號字串";
var str2 = "這是單引號字串";
var str3 = "這是錯誤示範';  // 不能混用喔!

有的時候在打英文我們可能會遇到打縮寫的情況,像是I'm 這樣的字,這個時候我們可這樣處理:

var str = "Hi! I'm Will" ;// 外面必須要用雙引號

如果外面硬要用單引號也是可以,但就需要透過 \ (跳脫字元,escape character)

var str = 'Hi! I\'m Will!';

然後,字串是能夠互相串接的,也能夠串接變數:

var age = 20;
var str = "Hi! I'm Alex." + "I'm " + age + " years old" ;

樣板字串(Template Strings)
從ES6開始新增了樣板字面值,它的規則是用一組 `` 做包裹
它增加字串的靈活性。

  1. 多行字串
var str = `這是第一行
這是第二行
這是第三行`;
  1. 組合變數
var age =20;
var str = `I am ${age} years old.`;
  1. 內嵌運算
var apple = 10;
var orange = 15;

var string = `I spent ${apple + orange} dollers on buying fruits`;

Number 數字
根據 ECMAScript 標準,數字型別只有一種,就是數字。它包含了整數與浮點數。

var num = 15;
var num2 = 15.23;

要特別注意的是浮點數不是精確的值,所以涉及小數的比較和運算要特別小心。

0.1 + 0.2 === 0.3
// false 

0.3/0.1
// 2.9999999999999996

(0.3 - 0.2) === (0.2 - 0.1)
// false

另外還有幾個特殊的數字:NaN (Not a Number)、Infinity(無限大)、 -Infinity(負無限大)

10/0 
// Infinity

-20/0
// -Infinity

0/0 
// NaN

NaN 非常詭異

typeof(NaN); // number
NaN === NaN  // false
5 + NaN //  NaN (任意數與NaN相加都會是NaN)

Boolean 布林值

boolean 有兩種:

  1. true
  2. false

布林值通常用在判斷式,作為控制程式流程的用途。

var a = true;
var b = false;
var c = (100 > 10); // true

Boolean() 可以用來將其他的資料型態轉型成布林值型態。

var x = 0;
Boolean(x); // false

x = 10;
Boolean(x); // true

x = "";
Boolean(x); // false

x = 'wow';
Boolean(x); // true

x = null;
Boolean(x); // false

x = undefined;
Boolean(x); // false

x = NaN;
Boolean(x); // false

在 JavaScript 當中,下列的值會被判定為false:

  1. null
  2. 數值 0
  3. NaN
  4. 空字串 ''
  5. undefined

除此以外的值都是 true!

Null 與 Undefined

在上面的boolean 有稍微提到說, 這兩個值在轉型後都會判定為false,那他們之間是有什麼差異嗎?

  • undefined 是此變數還未被宣告,或是宣告了但還未被賦予值。
  • undefined 的類型(typeof) 是 undefined。
  • null 就是 「沒有值」的值。
  • null 的類型(typeof)是一個 object。
null == undefined // true

null === undefined // false

以上就是關於基本的變數宣告及資料型態,若有任何建議,請各位多多指教!我們明天見!


上一篇
新手學習JavaScript:Day02 - Java? JavaScript? 傻傻分不清楚?
下一篇
新手學習JavaScript: day04 - 運算式、運算元與運算子,轉型轉到死(1)
系列文
純新手學習 JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言